package com.sg.dto.integration.framework;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @desc OrgPositionGradeDto
 * @使用场景
 */
@Data
public class OrgPositionGradeDto extends BaseDto implements Serializable {

    /**
     * 职务级别ID:
     */
    @NotNull(message = "职务级别ID不能为空")
    @ApiModelProperty("职务级别ID")
    private String positionGradeId;

    /**
     * 职务级别名称:
     */
    @NotNull(message = "职务级别名称不能为空")
    @ApiModelProperty("职务级别名称")
    private String positionGradeName;

    /**
     * 岗位类型ID:
     */
    @ApiModelProperty("岗位类型ID")
    private String stationTypeId;

    /**
     * 岗位类型名称:
     */
    @ApiModelProperty("岗位类型名称")
    private String stationTypeName;

    /**
     * 职务级别编号:
     */
    @ApiModelProperty("职务级别编号")
    private String positionGradeNumber;

    /**
     * 是否设置等级范围:
     */
    @ApiModelProperty("是否设置等级范围")
    private String isSetGrade;

    /**
     * 排序:
     */
    @ApiModelProperty("排序")
    private Long orderNumber;

    /**
     * 批次ID:
     */
    @ApiModelProperty("批次ID")
    private String batchId;

    /**
     * 批次开始时间:
     */
    @ApiModelProperty("批次开始时间 ")
    private Date batchStartTime;

    /**
     * 批次结束时间:
     */
    @ApiModelProperty("批次结束时间")
    private Date batchEndTime;

    /**
     * 主体生命周期:
     */
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;

    /**
     * 是否存档:
     */
    @ApiModelProperty("是否存档")
    private String isArchive;

    /**
     * 存档类型:
     */
    @ApiModelProperty("存档类型")
    private String archivngType;

    /**
     * 是否未来:
     */
    @ApiModelProperty("是否未来")
    private String isEditing;

    /**
     * 批次下是否更新:
     */
    @ApiModelProperty("批次下是否更新")
    private String isUpdate;

    /**
     * 批次下更新状态:
     */
    @ApiModelProperty("批次下更新状态")
    private String updateStatus;

    /**
     * 操作人就职记录ID:
     */
    @ApiModelProperty("操作人就职记录ID")
    private String operationInductionId;

    /**
     * 操作时间:
     */
    @ApiModelProperty("操作时间")
    private Date operateTime;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        OrgPositionGradeDto that = (OrgPositionGradeDto) o;
        return (
                positionGradeId == that.positionGradeId &&
                        positionGradeName == that.positionGradeName &&
                        stationTypeId == that.stationTypeId &&
                        stationTypeName == that.stationTypeName &&
                        positionGradeNumber == that.positionGradeNumber &&
                        isSetGrade == that.isSetGrade &&
                        orderNumber == that.orderNumber &&
                        batchId == that.batchId &&
                        batchStartTime == that.batchStartTime &&
                        batchEndTime == that.batchEndTime &&
                        subjectLifeCycle == that.subjectLifeCycle &&
                        isArchive == that.isArchive &&
                        archivngType == that.archivngType &&
                        isEditing == that.isEditing &&
                        isUpdate == that.isUpdate &&
                        updateStatus == that.updateStatus &&
                        operationInductionId == that.operationInductionId &&
                        operateTime == that.operateTime
        );
    }

    @Override
    public int hashCode() {
        return Objects.hash(
                super.hashCode(),
                positionGradeId,
                positionGradeName,
                stationTypeId,
                stationTypeName,
                positionGradeNumber,
                isSetGrade,
                orderNumber,
                batchId,
                batchStartTime,
                batchEndTime,
                subjectLifeCycle,
                isArchive,
                archivngType,
                isEditing,
                isUpdate,
                updateStatus,
                operationInductionId,
                operateTime
        );
    }

}
